在這里記錄了nodejs過(guò)程中的一些亂碼情況,這里的亂碼主要是由于網(wǎng)頁(yè)的編碼方式與nodejs的默認(rèn)解碼方式(utf8)不一致所造成的。這一次要說(shuō)一下的是在C語(yǔ)言和nodejs與MySQL進(jìn)行交互的時(shí)候出現(xiàn)的亂碼問(wèn)題。
1,由于爬蟲(chóng)程序在多個(gè)Docker中執(zhí)行,因此我需要定期的同步每一個(gè)docker中的mysql數(shù)據(jù)到一個(gè)全局的mysql數(shù)據(jù)表中。使用nodejs進(jìn)行數(shù)據(jù)同步,出現(xiàn)中文亂碼。要知道在每一docker中的中文是不存在亂碼的。原因是nodejs默認(rèn)處理字符是utf8,而mysql默認(rèn)是latin1,畢竟是歐洲人開(kāi)發(fā)的數(shù)據(jù)庫(kù)。分析如下
命令show variables like 'char%';得到的結(jié)果如下:
+--------------------------+----------------------------+| Variable_name | Value |+--------------------------+----------------------------+| character_set_client | latin1 || character_set_connection | latin1 || character_set_database | latin1 || character_set_filesystem | binary || character_set_results | latin1 || character_set_server | latin1 || character_set_system | latin1 || character_sets_dir | /usr/share/mysql/charsets/ |+--------------------------+----------------------------+
即在建立數(shù)據(jù)庫(kù)的時(shí)候不特別指定,則數(shù)據(jù)庫(kù),數(shù)據(jù)表的以及數(shù)據(jù)字段的編碼格式為默認(rèn)值,而默認(rèn)值在不更改配置文件的時(shí)候是latin1(默認(rèn)安裝形式)。由于utf8是較為通用的編碼方式,因此我們將數(shù)據(jù)庫(kù)的所有編碼方式改為utf8。這里需要說(shuō)明的是mysql的編碼分為好幾個(gè)層次,包括數(shù)據(jù)庫(kù)級(jí)別,數(shù)據(jù)表級(jí)別以及數(shù)據(jù)字段級(jí)別等,我這里沒(méi)有去深究這些方面,一個(gè)個(gè)去設(shè)置每個(gè)字段,每個(gè)表的編碼方式,而是把所有的編碼方式均設(shè)置為utf8。具體如下:
vi /etc/my.cnf修改my.cnf文件如下:
[mysqld]datadir=/var/lib/mysqlsocket=/var/lib/mysql/mysql.sockuser=mysqldefault-character-set = utf8character_set_server = utf8[mysql]default-character-set = utf8[mysql.server]default-character-set = utf8# Disabling symbolic-links is recommended to prevent assorted security riskssymbolic-links=0
[mysqld_safe]log-error=/var/log/mysqld.logpid-file=/var/run/mysqld/mysqld.piddefault-character-set = utf8[client]default-character-set = utf8
修改完之后,重起mysql服務(wù)service mysqld restart
命令show variables like 'char%';再次查看編碼格式,得到的結(jié)果如下:
+--------------------------+----------------------------+| Variable_name | Value |+--------------------------+----------------------------+| character_set_client | utf8 || character_set_connection | utf8 || character_set_database | utf8 || character_set_filesystem | binary || character_set_results | utf8 || character_set_server | utf8 || character_set_system | utf8 || character_sets_dir | /usr/share/mysql/charsets/ |+--------------------------+----------------------------+
新聞熱點(diǎn)
疑難解答
圖片精選