[英]MySQL 5.7 character_set_client stack at utf8mb4
長話短說:我們有一個基於 PHP 的自主開發的 CMS,最初是在 PHP5.x 和 MySQL 上,使用 utf8 和 iso-8859-1 字符集的健康組合(不要判斷,我知道這很奇怪,但它是在職的)。 在我們的生產環境中,我們的服務器提供商升級到 PHP7.2 並且(經過幾周的重構)一切正常。
與此生產環境並行,我為我們的開發設置了(或至少我嘗試過)一個測試環境,VirtualBox Ubuntu 20.04、apache2.4、PHP7.2 和 MySQL5.7。
在/etc/php/7.2/apache2/php.ini我有:
default_charset = "iso-8859-1"
在/etc/mysql/my.cnf我有:
[client]
default-character-set = utf8
[mysqld_safe]
default-character-set = utf8
[mysql]
default-character-set = utf8
[mysqld]
init_connect = 'SET NAMES utf8'
character-set-client-handshake = false #force encoding to uft8
character-set-server = utf8
collation-server = utf8_unicode_ci
現在,在我們的開發服務器上character_set_client=utf8mb4
和character_set_results=utf8mb4
我找不到改變它的方法。
問題是,當我嘗試從我們的生產服務器(通過我們的 CMS)導入我們的開發服務器轉儲時,或者當我嘗試使用特殊字符(如ü或ä)保存文本時,它總是在出現時剪切單詞並僅保存其余的,例如代替chüd將只保存ch或代替einträge它只保存eintr 。
但是我可以在數據庫中手動保存ü沒有問題(不必使用ü
)
(我們有第二個開發服務器,Ubuntu 14.04、apache2.4、PHP5.6、MySQL5.7 和 PHP7.2 測試服務器上的設置基本相同,一切正常)
也許PHP7.2在這里做的一團糟,我真的沒有想法。
任何幫助將不勝感激。 謝謝
請參閱UTF-8 字符問題中的“截斷” ; 我看到的不是我存儲的
我想知道 apache 沒有設置為 UTF-8 是否會弄亂<form>s
。
init_connect = 'SET NAMES utf8'
設置 3 個CHARACTER_SET_%
值,如果您不是以“root”身份連接。 因此,將其更改為utf8mb4
並且不要以“root”身份連接。
您確定導入數據中的編碼嗎? (我懷疑這會導致截斷問題。)你能得到一小部分數據的十六進制轉儲嗎?
對於西歐語言,MySQL 的utf8
和utf8mb4
工作方式相同。 也就是說,您擁有的init_connect
應該足夠了 _如果傳入的數據確實是 UTF-8,而不是 iso...
參考這里是十六進制值:
char latin1 utf8
ä E4 C3A4
ü FC C3BC
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.