我的环境
- 系统:Windows 7 64 位
- 数据库:MySQL 5.7.20 64 位
- 地区:中文
- cmd代码页:CP936
MySQL 设置
我的问题
在上述环境和数据库设置下,我尝试在创建的表cs_2中插入一条记录,但是失败了。
SQL 语句如下:
插入cs_2(方向)值('出');
结果是:
错误 1366 (HY000):不正确的字符串值:第 1 行的列 'direction' 的 '\xBA'
个人分析
在对mysql字符转换和Windows cmd输入转换进行了一些研究之后,我得到了以下指导:
- 首先是我在cmd上输入字符串时的字符转换:
键盘输入 -> 输入法转换 -> 系统内部编码
在我的例子中,系统内部编码是'出' 的UTF-16 LE格式的字节流</p>
- 二、是MySQL通信中根据系统变量的转换
系统内部编码 -> character_set_client -> character_set_connection -> 表的字符集
就我而言,这是
UTF-16 LE -> gbk -> gbk ->gbk
只有在系统内部编码和 character_set_client 之间的开始发生了转换。我认为转换是由系统本身执行的。
因此,在这种假设下,插入 SQL应该已经成功运行,但它失败了!我不知道为什么,我为这个问题苦苦挣扎了好几天,但我找不到解决方案。
如果有人碰巧遇到这个问题,请给我一些线索。非常感谢提前!