簡體   English   中英

utf8mb4 處的 MySQL 5.7 character_set_client 堆棧

[英]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=utf8mb4character_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 的utf8utf8mb4工作方式相同。 也就是說,您擁有的init_connect應該足夠了 _如果傳入的數據確實是 UTF-8,而不是 iso...

參考這里是十六進制值:

char latin1 utf8
ä    E4     C3A4
ü    FC     C3BC

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM