Есть столбец таблицы с кодировкой utf8 (менять кодировку нельзя).
Написал скрипт который заполняет этот столбец кириллицей(использую MySql.Data.dll). В результате в таблице получаю знаки вопросов '?????' вместо данных. При этом латиница записывается корректно.
И при отладке в переменных всё ОК.
Файл скрипта в кодировке UTF-8 с BOM (простой utf8 powershell не понимает).
Перед записью данных сообщаю серверу MySQL в какой кодировке будут данные
SET NAMES utf8
Подозреваю дело в самом POWERSHELL по тому пробовал:
[Console]::OutputEncoding = [System.Text.Encoding]::GetEncoding("UTF-8")
и
chcp 65001
После чего:
[Console]::OutputEncoding
показывает:
BodyName : utf-8
EncodingName : Unicode (UTF-8)
HeaderName : utf-8
WebName : utf-8
WindowsCodePage : 1200
IsBrowserDisplay : True
IsBrowserSave : True
IsMailNewsDisplay : True
IsMailNewsSave : True
IsSingleByte : False
EncoderFallback : System.Text.EncoderReplacementFallback
DecoderFallback : System.Text.DecoderReplacementFallback
IsReadOnly : False
CodePage : 65001
Все выше перечисленное тщетно а GOOGLE ответа не даёт. Надеюсь на вашу помощь ;)
P.S. Набросал код, что бы можно было воспроизвести проблему (для работы понадобится клиент MySQL):
[Console]::OutputEncoding = [System.Text.Encoding]::GetEncoding("UTF-8")
chcp 65001
Add-Type -Path "C:\Program Files (x86)\MySQL\MySQL Connector Net 8.0.18\Assemblies\v4.5.2\MySql.Data.dll"
$connector = New-Object MySql.Data.MySqlClient.MySqlConnection("Server=SERVER_NAME;uid=USER;pwd=PASSWORD;database=DB_NAME;Port=3306")
$connector.Open()
$cmd = New-Object MySql.Data.MySqlClient.MySqlCommand
$cmd.Connection = $connector
$cmd.CommandType = [System.Data.CommandType]::Text
$cmd.CommandText = "SET NAMES utf8"
$cmd.ExecuteNonQuery()
$cmd.CommandText = "INSERT INTO tbl_name (col1) VALUES('Тут что-то по русски, сцк !')"
$cmd.ExecuteNonQuery()
$connector.Close()
Спасибо PotroNik за подсказку !
Действительно нужно было сказать клиенту MySQL в какой кодировке передавать данные (по умолчанию кодировка системы)
В строку MySqlConnection необходимо добавить charset=utf8.
$connector = New-Object MySql.Data.MySqlClient.MySqlConnection("Server=SERVER_NAME;uid=USER;pwd=PASSWORD;database=DB_NAME;Port=3306";charset=utf8)
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
делаю периодически БД(Mysql) для интернет-магазинов, новостных сайтов и тд
Есть две таблицыНужно сделать выборку при условии что есть полное совпадение по ключам