Тексты с акцентированными символами сохраняются как NULL с PHP-FPM и MySQL - PullRequest
0 голосов
/ 19 апреля 2019

Я создаю инфраструктуру DevOps для приложения PHP CodeIgniter. Я использую Kubernetes для настройки PHP-FPM, NGINX и MariaDB (MySQL), и все, кажется, работает отлично, за исключением того, что каждый раз, когда кто-то пытается сохранить текстовое поле, которое содержит символы с акцентом, текст сохраняется вместо NULL и без ошибок отображаются.

Например: *. * 1004

  • Имя пользователя Testing.
  • Измените имя на Another Testing. (Идет хорошо)
  • Изменить имя на Helló Wôrld. (Или что-нибудь акцентированное)
  • Имя сохраняется как "". (Пустая строка)

Я знаю, что это не связано с приложением CodeIgniter, потому что я знаю, что оно работает без этой проблемы в другой инфраструктуре (к которой у меня нет доступа) с той же кодовой базой. Так что проблема должна быть с моей инфраструктурой.

Дамп базы данных, который я использовал для создания своей копии базы данных, был экспортирован непосредственно из рабочей инфраструктуры, в результате чего была собрана коллекция UTF8.

Чтобы исправить это, я настроил свою конфигурацию MySQL следующим образом:

[client]
default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4

[mysqld]
wait_timeout = 6000
max_allowed_packet = 64M
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

И мой database.php Файл конфигурации CodeIgniter как:

$db['default'] = array(
    'dsn'   => '',
    'hostname' => $_SERVER["MYSQL_HOST"],
    'username' => $_SERVER["MYSQL_USER"],
    'password' => $_SERVER["MYSQL_PASSWORD"],
    'database' => $_SERVER["MYSQL_DB"],
    'dbdriver' => 'mysqli',
    'dbprefix' => '',
    'pconnect' => FALSE,
    'db_debug' => TRUE,
    'cache_on' => FALSE,
    'cachedir' => '',
    'char_set' => 'utf8mb4',
    'dbcollat' => 'utf8mb4_unicode_ci',
    'swap_pre' => '',
    'encrypt' => FALSE,
    'compress' => FALSE,
    'stricton' => FALSE,
    'failover' => array(),
    'save_queries' => TRUE
);

Поэтому я существенно изменил его с utf8_general_ci на utf8mb4_unicode_ci.

Но это не исправлено, проблема продолжает происходить.

Я также проверил метатег HTML для набора символов и тоже для UTF-8.

Также, вероятно, это не связано, но вот мой nginx.conf файл:

user                            htdocs;
worker_processes                1;

error_log                       /var/log/nginx/error.log warn;
pid                             /var/run/nginx.pid;

events {
    worker_connections          1024;
}

http {
    include                     /etc/nginx/mime.types;
    default_type                application/octet-stream;
    sendfile                    on;
    access_log                  /var/log/nginx/access.log;
    keepalive_timeout           3000;
    set_real_ip_from            127.0.0.1;
    real_ip_header              X-Forwarded-For;
    real_ip_recursive           on;

    server {
        listen 4080;
        server_name localhost;
        root /htdocs;
        autoindex on;
        client_max_body_size 512m;
        index index.php;

        location / {

            try_files $uri $uri/ /index.php;

            location = /index.php {
                fastcgi_pass      127.0.0.1:9000;
                fastcgi_index     index.php;
                include           fastcgi.conf;
            }

            location = /instashow/api/index.php {
                fastcgi_pass      127.0.0.1:9000;
                fastcgi_index     index.php;
                include           fastcgi.conf;
            }
        }

        location ~ \.php$ {
            return 444;
        }
    }
}

Есть подсказка?

EDIT:

Забыл упомянуть, что я также попытался установить для всех таблиц, столбцов и полей значение utf8mb4_unicode_ci, а затем также "восстановить и оптимизировать" базу данных.

РЕДАКТИРОВАТЬ 2:

Я также видел этот вопрос перед тем, как опубликовать мой:
UTF-8 вплоть до

И поэтому я все равно решил опубликовать это. Я испробовал все решения и рекомендации, и я все еще на том же месте. У меня есть обратный прокси-сервер (другой NGINX), это может быть как-то связано?

РЕДАКТИРОВАТЬ 3:

Я могу вставлять акцентированные символы в базу данных вручную через PhpMyAdmin, они хранятся просто отлично. Также приложение CodeIgniter может читать и отображать их без проблем. Проблема в том, что когда дело доходит до записи в базу данных через приложение.

Это должно быть что-то не связанное с базой данных, я думаю, это может быть что-то с моей настройкой PHP, я не знаю. Влияет ли PHP-FPM на это? Я знаю, что конфигурация "кодировки по умолчанию" для PHP также установлена ​​в UTF-8.

РЕДАКТИРОВАТЬ 4:

Имя сохраняется как "". (Пустая строка)

Это неправильно. Сохраняется как NULL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...