Điểm:0

mysql_install_db bộ ký tự sai và đối chiếu

lá cờ in

Tôi đang tạo một máy chủ mới bằng công cụ mysql_install_db. Nó đặt đúng datadir, cổng, mật khẩu, dịch vụ, v.v. Nhưng vấn đề của tôi là bộ ký tự và đối chiếu các bảng cơ sở của tôi bị sai. Chúng cần phải là utf8mb4 và utf8mb4_general_ci.

Tôi không thể tìm cách thay đổi các bảng này khi cài đặt. Khi tôi thay đổi my.cnf/my.ini, nó chỉ thay đổi đối với cơ sở dữ liệu mới được tạo. Nhưng vì mysql_install_db tạo cơ sở dữ liệu hệ thống nên chúng được tạo sai.

Có vẻ như msyql_install_db.exe của tôi không chấp nhận đối số tệp mặc định.

Một cái gì đó khác cũng là lạ. Nếu tôi chạy lệnh để tạo cơ sở dữ liệu mới, nó cũng sẽ sử dụng utf8mb3 trong khi tôi đặt COLLATE rõ ràng thành utf8mb4_unicode_ci.

TẠO CƠ SỞ DỮ LIỆU NẾU KHÔNG TỒN TẠI tt THIẾT LẬP KÝ TỰ MẶC ĐỊNH utf8mb4 COLLATE utf8mb4_unicode_ci

Tôi đang sử dụng mariadb 10.6.4, đây là phiên bản mới nhất.

Bất kỳ ai cũng biết cách thiết lập bộ ký tự và đối chiếu chính xác với cơ sở dữ liệu hệ thống?

Tools\mariadb-winx64\bin\mysql_install_db.exe --datadir="Tools\mariadb-data" --password=PASSWORD --port=8137 --service=MyDB

nhập mô tả hình ảnh ở đây

[Cập nhật]

Tôi đã cố gắng thiết lập my.cnf như sau, nhưng dường như không có tác dụng: https://stackoverflow.com/questions/3513773/change-mysql-default-character-set-to-utf-8-in-my-cnf

Cũng đã thử sử dụng một cách khác với khởi tạo không an toàn, nhưng cũng có kết quả tương tự. Tôi đã tạo một my.cnf với mã hóa chính xác, nhưng vẫn bị mã hóa bảng sai:

mariadb-winx64\bin\mariadbd.exe --defaults-file=./my.cnf --initialize-insecure --datadir=./Test

Và my.cnf

[khách hàng]
default-character-set=utf8mb4


[mysql]
default-character-set=utf8mb4

[mysqld]
bỏ qua-cấp-bảng
cổng = 5137
máy chủ đối chiếu = utf8mb4_unicode_ci
init-connect='ĐẶT TÊN utf8mb4'
bộ ký tự-máy chủ = utf8mb4
Điểm:1
lá cờ ua

Đừng lo lắng về các bảng do hệ thống tạo ra (thông tin_lược đồ, vân vân). Bất kỳ nỗ lực sửa đổi chúng có thể dẫn đến các vấn đề nghiêm trọng.

Đúng, thật hợp lý khi chúng là utf8mb4, không phải utf8mb3. Nhưng hãy để việc chuyển đổi đó cho các nhà phát triển MySQL và MariaDB khắc phục (một ngày nào đó).

có lẽ tốt nhất cho của bạn bảng và kết nối thành utf8mb4. Nhưng bạn có quyền kiểm soát chúng.

lá cờ in
Vấn đề là tôi sử dụng trình kết nối .NET không hỗ trợ UTF8MB3 và tôi muốn xem liệu cơ sở dữ liệu có tồn tại hay không. Nơi tôi cần các bảng hệ thống.
lá cờ ua
@Niels - `utf8mb3` là từ đồng nghĩa với `utf8`. Chúng nên được hoán đổi cho nhau. Bạn _cannot_ sử dụng `utf8mb4_unicode_ci` với một trong hai. Phần đầu tiên của đối chiếu phải khớp với bộ ký tự.
lá cờ ua
@Niels - và bạn có thể `CHỌN` bảng utf8mb3 ngay cả khi `ĐẶT TÊN utf8mb4` có hiệu lực. Có lẽ tôi không biết vấn đề nằm ở đâu.
lá cờ in
Tôi đã xóa truy vấn `SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = @name` và chỉ thực hiện `TẠO DỮ LIỆU NẾU KHÔNG TỒN TẠI`. Vì vậy, tôi không cần đọc từ các bảng utf8mb3.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.