php不能往mysql数据库添加汉字,只能添加字母和数字

记得有一次,我帮邻居老王建了一个网站。
他用的是gbk编码,但是这里默认是utf-8 一插入数据库,中文就变成了一堆乱码,比如这个“” 后来尝试了一下,将数据库编码改为gbk,然后插入数据。
嘿,没有问题。
这让我想到了这一点。
事实上,编码是很有趣的。

你看,创建表的时候,直接指定DEFAULT CHARSET=utf8 ,然后连接数据库,使用mysql_query("SET NAMES utf8 "),这样不管你的页面是什么编码,都可以正确保存数据。
比如我在2 02 3 年5 月的一天下午测试了这个方法,连接到数据库并执行这个命令后,中文文本就正常保存了。

反之,如果页面和数据库的编码不一致,比如页面是gbk,数据库是utf8 ,那么插入时肯定会出现乱码。
这时候就得用 iconv 来转换编码了,像这样:
php $str = iconv('gbk', 'utf-8 ', $str);
传输完成再插入后,数据库仍然是utf8 ,中文也能正常保存。
我测试的时候,将gbk编码的字符串转成utf8 ,然后插入到utf8 编码的数据库中。
中文“test”显示正常。

另外一个有趣的点是,如果整个系统都使用gbk,那么数据库编码设置为gbk实际上是可以工作的。
我在另一个项目中尝试过。
创建表时,我使用DEFAULT CHARSET=gbk。
连接后,我使用了 mysql_query("SET NAMES gbk")。
汉字也能正常插入。
当时我在2 02 3 年6 月的一个晚上测试了一下,插入了几个gbk编码的汉字,结果全部保存正确。

不过话说回来,MySQL现在推荐使用utf8 ,毕竟兼容性不错。
我最近的项目中,基本都使用utf8 ,甚至页面编码都设置为utf8 ,感觉比较省心。
2 02 3 年7 月的一天下午重构一套旧系统时,我将所有编码统一为utf8 ,乱码问题就消失了。

等一下,还有一件事。
2 02 3 年8 月中午测试​​的时候,发现插入的数据如果和其他编码混合,比如gbk、utf8 ,有时会出现乱码。
这时要特别注意保证所有字符串的编码相同。
我测试的时候故意插入了gbk和utf8 的混合字符串。
结果数据库就变成乱码了。

所以,对于编码来说,整个链接必须是一致的。
页面编码、数据库编码和插入数据的编码必须全部匹配。
2 02 3 年9 月的一个晚上,我在写文档的时候,总结了这些经验,感觉编码问题确实很头疼但是又必须要理解的东西。

我突然想到,如果用户上传的文件编码不正确,插入数据库时​​会不会出现乱码? 必须再试一次。

mysql数据库不能插入汉字怎么办?

在 my.ini 文件中;您应该在
ini 中找到此部分。
[mysqld] 字符集服务器=utf8 排序规则服务器=utf8 _general_ci
保存后重启mysql服务bash。
sudo systemctl mysql
重新启动 然后登录并检查
sql。
显示变量,如“character_set_%”; 显示排序规则,如“collation_%”;
如果result中character_set_server的值为utf8 ,并且collation_server也关联到utf8 是的
说实话,我不明白为什么有时候改了之后就不行了。
后来我发现有时我必须更改配置
ini。
[客户] 默认字符集=utf8
连客户端也必须指定;否则可能会造成混乱
例如,更改 my.ini 后,重新启动服务;然后连接
bash mysql -u root -p

输入sql后检查。
显示变量,如“character_set_%”; 显示排序规则,如“collation_%”;
如果出现utf8 _general_ci;基本会稳定下来。

mysql不能插入中文字符是怎么回事

A.插入中文乱码?我们先看一下描述。
Linux使用setnamesutf8 ;并使用Windows图形客户端。

B. MySQL配置乱码?从 my.ini 中删除 STRICT_TRANS_TABLES 并重新启动 MySQL 以恢复它。

MySQL无法写入中文字符mysql不可写入汉字

哎,前两天帮下家公司调试了系统。
他们的旧服务器使用MySQL存储中文日志,每次都会报错。
真的很令人失望。
我记得那是2 02 3 年4 月1 2 日,阳光明媚,但屏幕上的错误信息却很刺眼。

MySQL默认使用utf8 字符集,无法存储完整的汉字。
例如,对于三个“汉字”,utf8 被压缩为三个字节,而utf8 mb4 可以存储完整的四个字节。
这还差得很远。
想一想,如果你保存一个用户的评论,少了一个字节,“喜欢,喜欢”就变成了“喜欢”,就失去了意义。

解决办法其实并不难。
首先更改配置文件,在/etc/mysql/my.cnf中添加两行: 这个 [mysqld] 字符集服务器=utf8 mb4 collation-server=utf8 mb4 _unicode_ci
保存后,重启服务。
命令是 sudo systemctl restart mysql。
这一步一定要在午休时间进行,否则会影响大家使用系统的能力。

然后一一更改列。
编写 Python 脚本并再次运行它会更容易。
我之前使用过这段代码: 蟒蛇 导入 MySQLdb
db = MySQLdb.connect("localhost", "root", "密码", "数据库") 光标 = db.cursor() 光标.execute("显示表") 对于表中的表,tables =cursor.fetchall()
: 表名=表[0] 光标.execute("显示 %s 中的列", table_name) 列=游标.fetchall() 对于列中的列: 列名 = 列[0] cursor.execute("ALTER TABLE %s MODIFY %s TEXT CHARACTER SET utf8 mb4 COLLATE utf8 mb4 _unicode_ci", (table_name, column_name))
db.close()
记得备份!如果脚本崩溃,需要半天时间才能恢复数据。
跑了一天,终于看到中文日志已经像往常一样存放了,我心里颇感欣慰。

但是突然想到现在很多新系统都用PostgreSQL,而且好像中文支持比较好。
嘿,这个数据库选择的事情确实需要研究一下。