centos7下mysql无法插入中文

meepoGuan 2017-08-29 07:19:32
编码该改的都改了就是无法插入中文。
求助!




...全文
678 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
代码誊写工 2017-08-30
  • 打赏
  • 举报
回复
Workbench之类的正常说明数据库和表结构没有问题。 终端如果设置正确(很多时候都是这里设置错误,例如在windows cmd下用ssh连接linux),再看操作系统,用locale看看编码。确保LC_ALL="en_US.UTF-8"或LANG="en_US.UTF-8",否则就设置一下。 导出的dump文件用file命令看看编码,用cat grep看看中文是否显示,如果不正常用enconv或iconv转成utf8编码
meepoGuan 2017-08-30
  • 打赏
  • 举报
回复
引用 8 楼 cy309173854 的回复:
redhat7的系统,mysql 5.7.16,我用的就是你的建表语句。 你能把mysql配置文件贴一下吗? 还有最好用mysql工具验证一下,是否也是同样的报错。 配置没问题的话不应该出现这种问题才对。
我是centos7 数据库版本是5.6.37 我在windows系统中使用数据库可视化工具进行连接,并且执行新增操作是可以的。 但是我如果导出一份数据库文件,去centos7中的mysql执行source操作,没有报错,但是中文还是显示乱码,我查看了各个项的配置,都是utf8,现在不知道怎么查了。。
meepoGuan 2017-08-30
  • 打赏
  • 举报
回复
引用 7 楼 prolee750607 的回复:
看看终端的编码
xshell 编码是utf8
曹宇飞丶 2017-08-30
  • 打赏
  • 举报
回复

redhat7的系统,mysql 5.7.16,我用的就是你的建表语句。
你能把mysql配置文件贴一下吗?
还有最好用mysql工具验证一下,是否也是同样的报错。
配置没问题的话不应该出现这种问题才对。
代码誊写工 2017-08-30
  • 打赏
  • 举报
回复
看看终端的编码
meepoGuan 2017-08-30
  • 打赏
  • 举报
回复
引用 4 楼 cy309173854 的回复:
唉,还是不够仔细啊,才发现id设置的是varchar。 我在想你能show create table 看下建表的时候DEFAULT CHARSET为何种字符吗。
mysql> show create table test; +-------+-------------------------------------------------------------------------------------------------------------------------------+ | Table | Create Table | +-------+-------------------------------------------------------------------------------------------------------------------------------+ | test | CREATE TABLE `test` ( `id` varchar(50) DEFAULT NULL, `name` varchar(50) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8 | +-------+-------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)
曹宇飞丶 2017-08-30
  • 打赏
  • 举报
回复
1366这个问题就是字符编码的问题,一定是哪里设置不对,如果找不到,那就重新建一张表,建表的时候在SQL语句中指定DEFAULT CHARSET=utf8。
曹宇飞丶 2017-08-30
  • 打赏
  • 举报
回复
唉,还是不够仔细啊,才发现id设置的是varchar。 我在想你能show create table 看下建表的时候DEFAULT CHARSET为何种字符吗。
曹宇飞丶 2017-08-30
  • 打赏
  • 举报
回复
晚上没注意看你贴的图,你的SQL语句明显问题嘛,仔细看下(id,name)对应的value! id肯定不能为中文啊
meepoGuan 2017-08-30
  • 打赏
  • 举报
回复
引用 1 楼 cy309173854 的回复:
这个问题好像在配置文件/etc/my.cnf 设置字符编码可以解决。
我设置过了,不行
meepoGuan 2017-08-30
  • 打赏
  • 举报
回复
引用 26 楼 prolee750607 的回复:
嗯,好吧,看起来真的不是设置的问题。 我查了一下'规范'的编码是"\xE8\xA7\x84\xE8\x8C\x83",而你这儿少了两个。我用少了两个的编码插入,也产生了和你那里一样的错误:
mysql --no-defaults -S /data/mysql.sock -uroot -p -bse "INSERT INTO mytest.test (id, name) VALUES ('$(printf \\x84\\xe8\\x8c\\x83)', '20')"
Enter password:
ERROR 1366 (22007) at line 1: Incorrect string value: '\x84\xE8\x8C\x83' for column 'id' at row 1
所以可能你一直用拷贝粘贴,你试着用键盘输入看看
mysql> SET NAMES 'utf8'; Query OK, 0 rows affected (0.00 sec) mysql> insert into test(id,name) values('发的','是'); ERROR 1366 (HY000): Incorrect string value: '\xE5\x8F\x91\xE7\x9A\x84' for column 'id' at row 1 我这次是手打。。。 被这个问题搞疯了。 总结一下现在的问题 1.在centos中无法执行中文插入操作。 2.在windows中使用可视化工具插入的时候,虽然可以成功,并且在可视化工具中显示是正常的,但是在centos中select显示是乱码。我查看了client以及server的编码都是utf8.
meepoGuan 2017-08-30
  • 打赏
  • 举报
回复
引用 24 楼 cy309173854 的回复:
在执行插入语句之前再运行一下 SET NAMES 'utf8';试试呢 ? 太诡异的问题了 ,配置没有问题,UI工具插入也没问题,终端上却有问题,我在想是不是connection 问题。
恩,我试了 ,也是同样。。。。。
曹宇飞丶 2017-08-30
  • 打赏
  • 举报
回复
引用 25 楼 u011890101 的回复:
[quote=引用 24 楼 cy309173854 的回复:] 在执行插入语句之前再运行一下 SET NAMES 'utf8';试试呢 ? 太诡异的问题了 ,配置没有问题,UI工具插入也没问题,终端上却有问题,我在想是不是connection 问题。
不用xshell,部署一个java程序跑插入的时候也不行。[/quote] 程序跑插入也是需要连接的,在java程序添加一个SET NAMES 'utf8';试试吧 我之前也遇到一个mysql的问题,用终端导入csv报分隔符的错,但是用UI工具导入却没有问题。 直到现在我也没解决那个问题,但是只要达到目的即可。
代码誊写工 2017-08-30
  • 打赏
  • 举报
回复
嗯,好吧,看起来真的不是设置的问题。 我查了一下'规范'的编码是"\xE8\xA7\x84\xE8\x8C\x83",而你这儿少了两个。我用少了两个的编码插入,也产生了和你那里一样的错误:
mysql --no-defaults -S /data/mysql.sock -uroot -p -bse "INSERT INTO mytest.test (id, name) VALUES ('$(printf \\x84\\xe8\\x8c\\x83)', '20')"
Enter password:
ERROR 1366 (22007) at line 1: Incorrect string value: '\x84\xE8\x8C\x83' for column 'id' at row 1
所以可能你一直用拷贝粘贴,你试着用键盘输入看看
meepoGuan 2017-08-30
  • 打赏
  • 举报
回复
引用 24 楼 cy309173854 的回复:
在执行插入语句之前再运行一下 SET NAMES 'utf8';试试呢 ? 太诡异的问题了 ,配置没有问题,UI工具插入也没问题,终端上却有问题,我在想是不是connection 问题。
不用xshell,部署一个java程序跑插入的时候也不行。
曹宇飞丶 2017-08-30
  • 打赏
  • 举报
回复
在执行插入语句之前再运行一下 SET NAMES 'utf8';试试呢 ? 太诡异的问题了 ,配置没有问题,UI工具插入也没问题,终端上却有问题,我在想是不是connection 问题。
meepoGuan 2017-08-30
  • 打赏
  • 举报
回复
引用 22 楼 prolee750607 的回复:
改改
mysql --no-defaults -S /var/lib/mysql/mysql.sock -uroot -p -bse "select '测试'"
mysql --no-defaults -S /var/lib/mysql/mysql.sock -uroot -p -bse "INSERT INTO cy.test (id, name) VALUES ('规范', '20')"
如如果sock文件不在/var/lib/mysql里(多半在),就找找然后修改一下
1. [root@localhost mysql]# mysql --no-defaults -S /var/lib/mysql/mysql.sock -uroot -p -bse "select '测试'" Enter password: 测试 测试 2.[root@localhost mysql]# mysql --no-defaults -S /var/lib/mysql/mysql.sock -uroot -p -bse "INSERT INTO test1.test (id, name) VALUES ('规范', '20')" Enter password: ERROR 1366 (HY000) at line 1: Incorrect string value: '\x84\xE8\x8C\x83' for column 'id' at row 1
代码誊写工 2017-08-30
  • 打赏
  • 举报
回复
改改
mysql --no-defaults -S /var/lib/mysql/mysql.sock -uroot -p -bse "select '测试'"
mysql --no-defaults -S /var/lib/mysql/mysql.sock -uroot -p -bse "INSERT INTO cy.test (id, name) VALUES ('规范', '20')"
如如果sock文件不在/var/lib/mysql里(多半在),就找找然后修改一下
代码誊写工 2017-08-30
  • 打赏
  • 举报
回复
引用 20 楼 u011890101 的回复:
[root@localhost ~]# echo "测试" > /tmp/mytest [root@localhost ~]# file -bi /tmp/mytest text/plain; charset=utf-8
确实说明不是终端和操作系统的问题。那你直接在shell下:
mysql -uroot -p -bse "select '测试'"
试试 如果返回正常,再用
mysql -uroot -p -bse "INSERT INTO cy.test (id, name) VALUES ('规范', '20')"
试试
meepoGuan 2017-08-30
  • 打赏
  • 举报
回复
引用 17 楼 prolee750607 的回复:
这样,你在xshell的终端里随便写个中文文本文件
echo "测试" > /tmp/mytest
然后用
file -bi /tmp/mytest
看看编码?
[root@localhost ~]# echo "测试" > /tmp/mytest [root@localhost ~]# file -bi /tmp/mytest text/plain; charset=utf-8 [root@localhost ~]#
加载更多回复(9)

19,613

社区成员

发帖
与我相关
我的任务
社区描述
系统使用、管理、维护问题。可以是Ubuntu, Fedora, Unix等等
社区管理员
  • 系统维护与使用区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧