查看: 7134|回复: 0
打印 上一主题 下一主题

MySQL中文字符FAQ

[复制链接]
跳转到指定楼层
1#
发表于 2007-9-7 23:48:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
台州网址导航
1.用EMS工具建立一个表t,添加一个字段f1,varchar(20).
  然后再在EMS中为该表添加一条记录,f1的值为'adfasfsa',成功。
  但当f1的值为中文时,提示失败:数据太长。
  f1是varchar(20),怎么会数据太长呢?用mysql命令行工具:insert into t (f1) values ('我');
  提示依旧。
  
  分析:
  当前配置的character_set_client值为非中文字符集。
  在mysql的一次会话中,服务器收到客户端发来的指令后,大致要执行3个动作:
  1、服务器认为收到的指令是按当前character_set_client环境变量所指定的字符集编码的,
  2、然后再将其转换成character_set_connection所指定的字符集编码
  3、分析、执行该指令。
  
  注:如果character_set_connection所指定的字符集不是中文字符集,则插入后,记录中的的中文仍然无法正常显示。
      因为mysql服务器是按character_set_connection所指定的编码存入数据库的。
      因此。character_set_client和character_set_connection的字符集必须保持一致。
      另外,character_set_results变量所指定的字符集表示服务器向客户端传输数据时所采用的字符集
      所以配置文件中的default-character-set参数同时表示character_set_connection、character_set_client、character_set_results
  如果当前character_set_client=latin1,则在将insert into t (f1) values ('我')从latin1转换成character_set_connection所指定的编码字符集时,
  mysql发现指令中的'我'是宽字符集,不是latin1字符集,于是报告错误:"ERROR 1406 (22001): Data too long for column 'f1' at row 1"
  
  解决办法:
  1.临时方案:在mysql命令行执行命令:set character_set_client = gbk.临时将character_set_client设成gbk字符集。
  2.永久方案:
  打开/etc/my.cnf文件 找到[mysql]部分,将default-character-set=latin1改成default-character-set=gbk。
  如果没有改行,则增加之。
  default-character-set=gbk
  
2、用mysqldump工具备份数据时,备份文件中的中文无法显示:
   mysqldump -u root -p --all-databases  > backup.sql
   打开backup.sql后,发现数据部分中的中文全部是????号。
   
   此时加一个参数:--default-char-set=gbk,重新导出即可。
   mysqldump -u root -p --all-databases --default-char-set=gbk > backup.sql
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享分享 分享淘帖
台州维博网络(www.tzweb.com)专门运用PHP+MYSQL/ASP.NET+MSSQL技术开发网站门户平台系统等。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

网站推广
关于我们
  • 台州朗动科技(Tzweb.com)拥有多年开发网站平台系统门户手机客户端等业务的成功经验。主要从事:政企网站,系统平台,微信公众号,各类小程序,手机APP客户端,浙里办微应用,浙政钉微应用、主机域名、虚拟空间、后期维护等服务,满足不同企业公司的需求,是台州地区领先的网络技术服务商!

Hi,扫描关注我

Copyright © 2005-2026 站长论坛 All rights reserved

Powered by 站长论坛 with TZWEB Update Techonolgy Support

快速回复 返回顶部 返回列表