Có một số hàm ngày trong MySQL trả về tên ngày hoặc tên tháng. Đặc biệt, tôi đang đề cập đến DATE_FORMAT()
, DAYNAME()
và MONTHNAME()
chức năng. Các giá trị này có thể trả về giá trị là Tháng 11 hoặc Thứ Hai , tùy thuộc vào truy vấn đang được sử dụng. Nhưng kết quả cũng có thể dễ dàng được trả về bằng một ngôn ngữ khác nếu được yêu cầu.
Ngôn ngữ mà các hàm này sử dụng cho giá trị trả về của chúng được lấy từ lc_time_names
biến hệ thống. Bạn có thể xem giá trị của biến này hoặc đặt SESSION
của nó giá trị để kết quả của các hàm này ở ngôn ngữ / địa phương mong muốn.
Tên ngôn ngữ có các thẻ phụ của ngôn ngữ và khu vực được liệt kê bởi Cơ quan cấp số lượng được ấn định trên Internet (IANA). Các ví dụ bao gồm en_US
cho tiếng Anh - Hoa Kỳ , en_NZ
cho tiếng Anh - New Zealand hoặc es_PA
cho Tiếng Tây Ban Nha - Panama , v.v. (để biết danh sách các ngôn ngữ được MySQL hỗ trợ, hãy xem Danh sách đầy đủ các ngôn ngữ trong MySQL).
Trong bài viết này, tôi sẽ chỉ cho bạn cách tìm ngôn ngữ hiện tại cho kết nối của bạn, thay đổi ngôn ngữ đó và sau đó xem nó ảnh hưởng như thế nào đến kết quả của một truy vấn. Tôi cũng chỉ cho bạn một chức năng miễn nhiễm với cài đặt này (nhưng đừng lo, chức năng này cho phép bạn chỉ định ngôn ngữ).
Xem ngôn ngữ hiện tại
Trước tiên, hãy xem giá trị hiện tại của lc_time_names
biến hệ thống.
CHỌN @@ lc_time_names;
Kết quả:
+ ----------------- + | @@ lc_time_names | + ----------------- + | en_US | + ----------------- +
Vì vậy, ngôn ngữ hiện tại của tôi là en_US
. Đây thực sự là giá trị mặc định bất kể cài đặt ngôn ngữ của hệ thống của bạn là gì (nhưng có thể thay đổi giá trị này khi khởi động máy chủ hoặc bằng cách thiết lập GLOBAL
giá trị).
Thay đổi ngôn ngữ
Bây giờ chúng ta hãy thay đổi ngôn ngữ và xem kết quả.
SET lc_time_names ='de_BE'; CHỌN @@ lc_time_names;
Kết quả:
+ ----------------- + | @@ lc_time_names | + ----------------- + | de_BE | + ----------------- +
Trong trường hợp này, tôi đã thay đổi ngôn ngữ thành de_BE
, dành cho Đức - Bỉ .
Ví dụ về cách sử dụng
Đây là một ví dụ mà tôi đặt ngôn ngữ, sau đó chạy truy vấn trả về tên tháng. Sau đó, tôi đặt ngôn ngữ thành một giá trị khác, rồi chạy lại cùng một truy vấn.
Ngôn ngữ thứ nhất:Tiếng Anh - Hoa Kỳ
SET lc_time_names ='en_US'; CHỌN MONTHNAME ('1999-10-03');
Kết quả:
+ ------------------------- + | MONTHNAME ('1999-10-03') | + ------------------------- + | Tháng 10 | + ------------------------- +
Ngôn ngữ thứ 2:Tây Ban Nha - Tây Ban Nha
SET lc_time_names ='es_ES'; CHỌN MONTHNAME ('1999-10-03');
Kết quả:
+ ------------------------- + | MONTHNAME ('1999-10-03') | + ------------------------- + | octubre | + ------------------------- +
Hàm FORMAT ()
Giá trị của lc_time_names
không ảnh hưởng đến FORMAT()
nhưng hàm này chấp nhận đối số thứ 3 cho phép bạn chỉ định ngôn ngữ. Đây là một ví dụ về ý tôi muốn nói.
SET lc_time_names ='de_DE'; CHỌN ĐỊNH DẠNG (1234, 0), ĐỊNH DẠNG (1234, 0, 'de_DE');
Kết quả:
+ ----------------- + -------------------------- + | ĐỊNH DẠNG (1234, 0) | ĐỊNH DẠNG (1234, 0, 'de_DE') | + ----------------- + -------------------- ------ + | 1,234 | 1.234 | + ----------------- + -------------------------- +Vì vậy, mặc dù tôi đã đặt
lc_time_names
thànhde_DE
đầu tiên, lệnh gọi đầu tiên tớiFORMAT()
bỏ qua điều đó. Khi tôi gọi hàm lần thứ hai, tôi đã chỉ định rõ ràng cùng ngôn ngữ / miền địa phương đó làm đối số thứ 3 và nó đã hoạt động.