2017-02-16 3 views
0

Почему при подключении с клиентом mysql на моем сервере я могу запустить CHARSET utf8mb4 и изменить кодировку соединения, но когда я пытаюсь выполнить этот же оператор через mysqli, он дает мне следующее сообщение об ошибке:Невозможно изменить Charset PHP MySQLi Connection

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().

+1

FYI: В соответствии с PHP инструкции: _Примечание: Это (set_charset) является предпочтительным способом изменить кодировку. Использование mysqli_query() для его установки (например, SET NAMES utf8) не рекомендуется. См. Раздел Концепции набора символов MySQL для получения дополнительной информации. – RiggsFolly

0

Вы можете использовать SET CHARACTER SET utf8mb4; заявление о подключении к базе данных

+0

Почему моя команда работает на клиенте, а не когда я запускаю ее через mysqli? Ваша команда действительно работает, но я хотел бы знать, почему мой не работает – thatidiotguy

+1

См. Объяснение по принятому ответу. –

+0

@AlexSlipknot - 'SET NAMES' устанавливает 3 настройки. Ваше предложение устанавливает только один из них и приведет к таинственной проблеме, которую я не хочу отлаживать. –

Смежные вопросы