MySQL to Windows cmd 插入汉字出现奇怪问题
Wierd problems when insert Chines characters into MySQL via Windows cmd
我的环境
- 系统:Windows7 64 位
- 数据库:MySQL 5.7.20 64 位
- 语言环境:中文
- cmd代码页:CP936
MySQL 设置
系统变量:
enter image description here
table 信息:enter image description here
我的问题
在上面描述的环境和数据库设置下,我试图在创建的tablecs_2中插入一条记录,但是,它失败了。
SQL语句如下:
insert into cs_2 (direction) values('出');
结果是:
ERROR 1366 (HY000): Incorrect string value: '\xBA' for column 'direction' at row 1
个人分析
在对 mysql 字符转换和 Windows cmd 输入转换进行了一些研究后,我得到了以下指导:
- 首先是我在cmd输入字符串时的字符转换:
Keyborad typing -> inputmethod conversion -> system inner encoding
在我的例子中,系统内部编码是UTF-16 LE格式的'出'
字节流
- 其次是MySQL通讯中根据系统变量
的转换
system inner encoding -> character_set_client -> character_set_connection -> character set of table
就我而言,这是
UTF-16 LE -> gbk -> gbk ->gbk
仅在系统内部编码和character_set_client之间开始时发生转换。而且我还以为转换是系统自己做的
因此,在这种假设下,插入SQL应该运行成功,但是失败了!不知道为什么,我已经为这个问题纠结了好几天了,还是找不到解决办法。
如果有哪位碰巧遇到过这个问题,请给我一些线索。非常感谢!
在 mysql 中创建数据库或 table 时,您必须指定要以 utf-8 格式创建此 table(如果需要,则需要使用中文字符集执行操作)
创建具有 utf8 格式字符集的 table(或者可能更好的整个数据库):
将table转换为utf8:
ALTER TABLE tbl_name CONVERT TO CHARACTER SET utf8;
将整个数据库转换为 utf8 看这个答案:
How to convert an entire MySQL database characterset and collation to UTF-8?
从头开始创建一个utf8数据库使用以下命令:
CREATE DATABASE mydatabase CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
(来源https://dba.stackexchange.com/a/76789)
这应该能解决您的问题。
我的环境
- 系统:Windows7 64 位
- 数据库:MySQL 5.7.20 64 位
- 语言环境:中文
- cmd代码页:CP936
MySQL 设置
系统变量: enter image description here
table 信息:enter image description here
我的问题
在上面描述的环境和数据库设置下,我试图在创建的tablecs_2中插入一条记录,但是,它失败了。
SQL语句如下:
insert into cs_2 (direction) values('出');
结果是:
ERROR 1366 (HY000): Incorrect string value: '\xBA' for column 'direction' at row 1
个人分析
在对 mysql 字符转换和 Windows cmd 输入转换进行了一些研究后,我得到了以下指导:
- 首先是我在cmd输入字符串时的字符转换:
Keyborad typing -> inputmethod conversion -> system inner encoding
在我的例子中,系统内部编码是UTF-16 LE格式的'出'
字节流- 其次是MySQL通讯中根据系统变量 的转换
system inner encoding -> character_set_client -> character_set_connection -> character set of table
就我而言,这是
UTF-16 LE -> gbk -> gbk ->gbk
仅在系统内部编码和character_set_client之间开始时发生转换。而且我还以为转换是系统自己做的
因此,在这种假设下,插入SQL应该运行成功,但是失败了!不知道为什么,我已经为这个问题纠结了好几天了,还是找不到解决办法。
如果有哪位碰巧遇到过这个问题,请给我一些线索。非常感谢!
在 mysql 中创建数据库或 table 时,您必须指定要以 utf-8 格式创建此 table(如果需要,则需要使用中文字符集执行操作)
创建具有 utf8 格式字符集的 table(或者可能更好的整个数据库):
将table转换为utf8:
ALTER TABLE tbl_name CONVERT TO CHARACTER SET utf8;
将整个数据库转换为 utf8 看这个答案:
How to convert an entire MySQL database characterset and collation to UTF-8?
从头开始创建一个utf8数据库使用以下命令:
CREATE DATABASE mydatabase CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
(来源https://dba.stackexchange.com/a/76789)
这应该能解决您的问题。