2017-02-16 5 views
0

私のサーバでmysqlクライアントと接続すると "CHARSET utf8mb4"を実行して接続の文字セットを変更できますが、mysqliで同じ文を実行しようとすると、次のエラー:PHPの文字セットを変更できないMySQLi接続

ERROR SQL error in "charset utf8mb4"; You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'charset utf8mb4' at line 1

答えて

1

私の知る限り、MySQLサーバーにはcharsetコマンドもありません。文字セットをSET NAMESで指定します。これはいくつかの関連する変数を設定するためのショートカットです(これらの変数はいずれもSETコマンドで設定できます)。

おそらく、公式のコマンドラインクライアントのコマンドと混同している:

mysql> \h 

For information about MySQL products and services, visit: 
    http://www.mysql.com/ 
For developer information, including the MySQL Reference Manual, visit: 
    http://dev.mysql.com/ 
To buy MySQL Enterprise support, training, or other products, visit: 
    https://shop.mysql.com/ 

List of all MySQL commands: 
Note that all text commands must be first on line and end with ';' 
?   (\?) Synonym for `help'. 
clear  (\c) Clear the current input statement. 
connect (\r) Reconnect to the server. Optional arguments are db and host. 
delimiter (\d) Set statement delimiter. 
ego  (\G) Send command to mysql server, display result vertically. 
exit  (\q) Exit mysql. Same as quit. 
go  (\g) Send command to mysql server. 
help  (\h) Display this help. 
notee  (\t) Don't write into outfile. 
print  (\p) Print current command. 
prompt (\R) Change your mysql prompt. 
quit  (\q) Quit mysql. 
rehash (\#) Rebuild completion hash. 
source (\.) Execute an SQL script file. Takes a file name as an argument. 
status (\s) Get status information from the server. 
tee  (\T) Set outfile [to_outfile]. Append everything into given outfile. 
use  (\u) Use another database. Takes database name as argument. 
charset (\C) Switch to another charset. Might be needed for processing binlog with multi-byte charsets. 
warnings (\W) Show warnings after every statement. 
nowarning (\w) Don't show warnings after every statement. 

あなたがPHPではなく、コマンドラインクライアントを使用しているので、それは存在しません。

もちろん、エンコーディングを設定するmysqliの方法はmysqli::set_charset()です。 _Note:PHPマニュアルによると:この(set_charset)文字セットを変更するための好ましい方法である

+1

への接続にSET CHARACTER SET utf8mb4;ステートメントを使用することができます。 mysqli_query()を使用して設定する(SET NAMES utf8など)はお勧めしません。詳細については、MySQLの文字セットの概念のセクションを参照してください._ – RiggsFolly

0

あなたはFYIデータベース

+0

私のコマンドはクライアントで動作し、mysqliで実行するのはなぜですか?あなたのコマンドは実際に動作しますが、なぜ私が動作しないのかを知りたいです。 – thatidiotguy

+1

受け入れられた回答の説明を参照してください。 –

+0

@AlexSlipknot - 'SET NAMES'は3つの設定を行います。あなたの提案はそれらのうちの1つだけを設定し、デバッグしたくない謎の問題につながります。 –

関連する問題