我在使用XAMPP控制面板v3.2.4的Windows 10中观察到了一种奇怪的情况
启动终端窗口并连接到Mysql。
注意:在终端窗口之前,发出命令'chcp 65001‘以支持UTF8编码。
现在,当我试图用西里尔语更新某个表时,MySQL会抱怨没有关闭引号。如果我替换了西里尔的英语输入,那么命令就被接受了。
MariaDB [youtube]> update episodes set name='Катя' where id=11;
'>如果我试图向DB中插入新记录,也会发生同样的情况。
MariaDB [youtube]> insert into episodes (youtube_id,series_id,season,episode,name) values (12345678904,1,0,1,'Катя');
'>如果使用双引号,则情况相同。
MariaDB [youtube]> insert into episodes (youtube_id,series_id,season,episode,title) values (12345678904,1,0,1,"Катя");
">要让它通过终端窗口工作,需要多神奇的触摸?
更新:
约翰建议查看MariaDB的配置文件以获取UTF8设置。
设置更改为以下内容,问题仍然存在
# The MySQL server
default-character-set=utf8mb4
[mysqld]
init-connect=\'SET NAMES utf8\'
character_set_server=utf8
collation_server=utf8_unicode_ci
skip-character-set-client-handshake
character_sets-dir="C:/bin/XAMPP/App/xampp/mysql/share/charsets"最初的设置是
# The MySQL server
default-character-set=utf8mb4
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci服务器状态报告
MariaDB [youtube]> \s
--------------
mysql Ver 15.1 Distrib 10.4.10-MariaDB, for Win64 (AMD64), source revision c24ec3cece6d8bf70dac7519b6fd397c464f7a82
Connection id: 17
Current database: youtube
Current user: root@localhost
SSL: Not in use
Using delimiter: ;
Server: MariaDB
Server version: 10.4.10-MariaDB mariadb.org binary distribution
Protocol version: 10
Connection: localhost via TCP/IP
Server characterset: utf8
Db characterset: utf8mb4
Client characterset: utf8mb4
Conn. characterset: utf8mb4
TCP port: 3306
Uptime: 11 min 12 sec
Threads: 7 Questions: 59 Slow queries: 0 Opens: 22 Flush tables: 1 Open tables: 16 Queries per second avg: 0.087
--------------MariaDB文档引用了一个选项--default-character-set=name。
在命令行上使用--default-character-set=utf8mb4的尝试对终端客户端的插入/更新记录行为没有影响。
mysql -u root -p --default-character-set=utf8mb4 youtube
....
MariaDB [youtube]> update episodes set title='Катя' where id=11;
'>发布于 2020-07-01 01:56:18
我强烈建议获得免费软件程序HeidiSQL的副本。它并不完美,甚至偶尔也会崩溃,尽管与我工作过的其他东西相比,它还不够完美吗?哦,天哪,完全值得我花时间。
其次,要确保您使用的是以下内容:
数据库字符集:utf8mb4数据库排序规则:utf8mb4_unicode_520_ci
这些都有最伟大的UTF-8支持,从我从Stackoverflow成员里克·詹姆斯,通过他的网站读到。他是个数据库巨星,所以如果你雇他的话,就把一桶钱扔到他脸上。他的网站有一个比较图表。事实上,从上次检查到现在已经有一段时间了,而且520可能已经被取代了。
要设置/更改数据库字符集,需要更改MariaDB的MariaDB配置文件,建议使用Notepad++进行代码编辑。这应该会使任何新创建的数据库使用正确的编码,但是您可能需要遍历并手动更新数据库、表和表列的字符集和排序规则,所以不要忘记彻底!
[client]
default-character-set = utf8mb4
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_520_ci一旦你这样做了,你对俄语/希腊语/etc的查询就应该像对英语一样正常工作。关键词:应该。
因为我只会说两种语言(英语和糟糕的英语),所以我将所有的字符编码到某个Unicode数字点上,只是为了确定。它将占用更多的空间,但是,在定义了大多数语言之后,有时会为Unicode添加一些字符,从而可能使语言支持变得支离破碎。如果你有兴趣的话,我会帮你找到那个代码的。
我是一个中等水平的理解,我不是里克詹姆斯,虽然我有大约20或30页翻译(使用搜索功能和搜索‘翻译’)在我的网站上,如果你想看到输出。在我做了这些事情之后,我不再让数据被破坏。我希望这能帮到你!
https://stackoverflow.com/questions/62668055
复制相似问题