在数据库中通过text文本存储中文字符出现如图下所示错误
2011-11-22 21:14
309 查看
错误:在数据库中通过text文本存储中文字符出现如图下所示错误
错误:
1.测试英文字符,数字,标点均能插入到text文本中
2.测试中文标点,汉字均不能通过
解决思路:
分析原因1.mysql数据库版本过低
分析原因2.辅助工具navicat for mysql 工具版本过低
解决1.之前使用的数据库版本为:mysql-essential-5.1.57-win32更换版本为mysql-5.5.15-win32测试后结果不变,错误未解决
解决2.之前使用的navicat工具版本为navicat8_mysql_cs 更换版本为Navicat_for_MySQL_9.0.15测试后结果依然不变,错误未解
错误解决:原来在创建数据库时创建数据库的校对设置成了utf8_bin,改为utf8_unicode_ci后,错误解决!!!
为此我特意到网上查找了有关utf8_bin与utf8_unicode_ci:
发现了校对有如下特点:
两个不同的字符集不能有相同的校对规则。
每个字符集有一个默认校对规则。例如,latin1默认校对规则是latin1_swedish_ci。
存在校对规则命名约定:它们以其相关的字符集名开始,通常包括一个语言名,并且以_ci(大小写不敏感)、_cs(大小写敏感)或_bin(二元)结束。
Mysql中校对集utf8_unicode_ci与utf8_general_ci的区别:
utf8_unicode_ci校对规则仅部分支持Unicode校对规则算法。一些字符还是不能支持。并且,不能完全支持组合的记号。这主要影响越南和俄罗斯的一些少数民族语言,如:Udmurt 、Tatar、Bashkir和Mari。
utf8_unicode_ci的最主要的特色是支持扩展,即当把一个字母看作与其它字母组合相等时。例如,在德语和一些其它语言中‘ß’等于‘ss’。
utf8_general_ci是一个遗留的 校对规则,不支持扩展。它仅能够在字符之间进行逐个比较。这意味着utf8_general_ci校对规则进行的比较速度很快,但是与使用utf8_unicode_ci的 校对规则相比,比较正确性较差)。
例如,使用utf8_general_ci和utf8_unicode_ci两种校对规则下面的比较相等:
Ä = A
Ö = O
Ü = U
两种校对规则之间的区别是,对于utf8_general_ci下面的等式成立:
ß = s
但是,对于utf8_unicode_ci下面等式成立:
ß = ss
对于一种语言仅当使用utf8_unicode_ci排序做的不好时,才执行与具体语言相关的utf8字符集 校对规则。例如,对于德语和法语,utf8_unicode_ci工作的很好,因此不再需要为这两种语言创建特殊的utf8校对规则。
utf8_general_ci也适用与德语和法语,除了‘ß’等于‘s’,而不是‘ss’之外。如果你的应用能够接受这些,那么应该使用utf8_general_ci,因为它速度快。否则,使用utf8_unicode_ci,因为它比较准确
错误:
1.测试英文字符,数字,标点均能插入到text文本中
2.测试中文标点,汉字均不能通过
解决思路:
分析原因1.mysql数据库版本过低
分析原因2.辅助工具navicat for mysql 工具版本过低
解决1.之前使用的数据库版本为:mysql-essential-5.1.57-win32更换版本为mysql-5.5.15-win32测试后结果不变,错误未解决
解决2.之前使用的navicat工具版本为navicat8_mysql_cs 更换版本为Navicat_for_MySQL_9.0.15测试后结果依然不变,错误未解
错误解决:原来在创建数据库时创建数据库的校对设置成了utf8_bin,改为utf8_unicode_ci后,错误解决!!!
为此我特意到网上查找了有关utf8_bin与utf8_unicode_ci:
发现了校对有如下特点:
两个不同的字符集不能有相同的校对规则。
每个字符集有一个默认校对规则。例如,latin1默认校对规则是latin1_swedish_ci。
存在校对规则命名约定:它们以其相关的字符集名开始,通常包括一个语言名,并且以_ci(大小写不敏感)、_cs(大小写敏感)或_bin(二元)结束。
Mysql中校对集utf8_unicode_ci与utf8_general_ci的区别:
utf8_unicode_ci校对规则仅部分支持Unicode校对规则算法。一些字符还是不能支持。并且,不能完全支持组合的记号。这主要影响越南和俄罗斯的一些少数民族语言,如:Udmurt 、Tatar、Bashkir和Mari。
utf8_unicode_ci的最主要的特色是支持扩展,即当把一个字母看作与其它字母组合相等时。例如,在德语和一些其它语言中‘ß’等于‘ss’。
utf8_general_ci是一个遗留的 校对规则,不支持扩展。它仅能够在字符之间进行逐个比较。这意味着utf8_general_ci校对规则进行的比较速度很快,但是与使用utf8_unicode_ci的 校对规则相比,比较正确性较差)。
例如,使用utf8_general_ci和utf8_unicode_ci两种校对规则下面的比较相等:
Ä = A
Ö = O
Ü = U
两种校对规则之间的区别是,对于utf8_general_ci下面的等式成立:
ß = s
但是,对于utf8_unicode_ci下面等式成立:
ß = ss
对于一种语言仅当使用utf8_unicode_ci排序做的不好时,才执行与具体语言相关的utf8字符集 校对规则。例如,对于德语和法语,utf8_unicode_ci工作的很好,因此不再需要为这两种语言创建特殊的utf8校对规则。
utf8_general_ci也适用与德语和法语,除了‘ß’等于‘s’,而不是‘ss’之外。如果你的应用能够接受这些,那么应该使用utf8_general_ci,因为它速度快。否则,使用utf8_unicode_ci,因为它比较准确
相关文章推荐
- 通过struts2获取存储到数据库出现中文乱码问题
- js传入参数是中文的时候出现 “******”未定义错误||js传入字符参数时没有效果
- EXCEL导入到SQL Server经常出现“文本被截断,或者一个或多个字符在目标代码页中没有匹配项”错误的解决
- 今天遇到Mysql 插入数据里有中文字符出现 Incorrect string value 的错误
- Windows 平台下编辑文本复制到Linux下后,中文字符出现乱码的问题
- mysql更改了数据库存储路径后,出现错误1067 进程意外终止
- str 绑定值的结尾 null 字符缺失(oracle数据库通过pde恢复,容易出现该错误)
- 安装oracle 10g 数据库后, 在pl/sql 或再sql/plus 中输入中文字符,出现 ?
- php 存储中文字符到数据库时意外空白,未能成功保存的解决办法
- java项目存储数据到数据库出现中文乱码,解决办法
- 向SQL2005导入Excel数据出现“文本被截断,或者一个或多个字符在目标代码页中没有匹配项”的错误0xc020901c
- Struts2表单提交的中文字符数据用hibernate存储在数据库中是乱码的问题。
- Mysql插入数据里有中文字符出现Incorrect string value的错误
- .net运行中出现 “CS1012: 字符文本中的字符太多”错误
- 关于后台数据库正常存储中文通过Ajax方式传递到前台变成问号的处理
- MySql系列:中文写入数据库出现错误java.sql.SQLException: Incorrect string value: '\xE5\xxxx' for column 'xxxx' at row 1及其解决方法
- 今天遇到Mysql插入数据里有中文字符出现Incorrect string value的错误
- 专利系统数据库连接出现 base-64字符串中的无效字符 错误
- java freemarker 通过ftl模板文件导出word文件发现在有中文地方出现在乱码,打开word文件提示xml错误解决办法
- python与sqlite处理中文字符时出现的编码错误问题解决