mysql<—>dm
Lỗi khi di chuyển từ MySQL sang Dameng: [Thông báo lỗi: Kiểu dữ liệu không được hỗ trợ]
Thay đổi trình điều khiển JDBC cho công cụ di chuyển DM. Địa chỉ trình điều khiển này nằm trong gói cài đặt, đường dẫn tương đối là: /drivers/jdbc, bạn có thể chọn phiên bản mới nhất.
Không hỗ trợ chú thích trực tiếp (comment)
Khi tạo bảng, không thể thêm chú thích (comment) ngay sau cột. Thay vào đó, hãy sử dụng COMMENT ON IS như sau:
COMMENT ON TABLE ten_bang IS 'Mô tả bảng';
COMMENT ON COLUMN ten_cot IS 'Mô tả cột';
Không hỗ trợ hàm date_sub
Sử dụng dateadd(datepart, n, date) thay thế.
Trong đó, datepart có thể là: year(yy,yyyy), quarter(qq,q), month(mm,m), dayofyear(dy,y), day(dd,d), week(wk,ww), weekday(dw), hour(hh), minute(mi,n), second(ss,s), millisecond(ms). Ví dụ:
-- Trừ 6 tháng
select dateadd(month, -6, now());
-- Cộng 2 tháng
select dateadd(month, 2, now());
Không hỗ trợ hàm date_format
- Sử dụng
datepartthay thế: Cú pháp:datepart(datepart, date), trả về một số nguyên đại diện cho phần chỉ định của ngày
datepart có thể là: year(yy,yyyy), quarter(qq,q), month(mm,m), dayofyear(dy,y), day(dd,d), week(wk,ww), weekday(dw), hour(hh), minute(mi,n), second(ss,s), millisecond(ms). Ví dụ:
select datepart(year, '2018-12-13 08:45:00'); --2018
select datepart(month, '2018-12-13 08:45:00'); --12
- Sử dụng
date_partthay thế, có chức năng tương tựdatepartnhưng cú pháp khác, thứ tự tham số đảo ngược và đều phải đặt trong dấu ngoặc kép
select date_part('2018-12-13 08:45:00', 'year');--2018
select date_part('2018-12-13 08:45:00', 'mm'); -- 12
- Sử dụng
extractthay thế, cú pháp:extract(dtfield from date), trích xuất giá trịdtfieldtừ kiểu ngàydate.dtfieldcó thể là year, month, day, hour, minute, second. Ví dụ:
select extract(year from '2018-12-13 08:45:00'); --2018
select extract(month from '2018-12-13 08:45:00'); --12
Không hỗ trợ hàm substring_index
Sử dụng substr hoặc substring thay thế,
Cú pháp:
substr(chuoi[, vi_tri_bat_dau[, do_dai]])
substring(chuoi FROM vi_tri_bat_dau [FOR do_dai])
Sự khác biệt về cột tự động tăng (auto-increment)
- Sự khác biệt về cú pháp: Trong MySQL, sử dụng từ khóa AUTO_INCREMENT để định nghĩa cột tự động tăng, trong khi trong cơ sở dữ liệu Dameng, sử dụng từ khóa IDENTITY.
- Hỗ trợ kiểu dữ liệu: Cột tự động tăng trong MySQL có thể áp dụng cho các kiểu số nguyên (như INT, BIGINT), trong khi cột tự động tăng trong Dameng chỉ có thể áp dụng cho các kiểu số (như NUMBER, DECIMAL).
- Giá trị khởi tạo và bước nhảy: Trong MySQL, bạn có thể tùy chỉnh giá trị khởi tạo và bước nhảy của cột tự động tăng. Trong Dameng, giá trị khởi tạo mặc định là 1, bước nhảy mặc định là 1, không thể thay đổi trực tiếp.
- Độc nhất của cột tự động tăng: Trong MySQL, giá trị của cột tự động tăng là duy nhất trong bảng. Trong Dameng, mặc định giá trị của cột tự động tăng là duy nhất, nhưng có thể cho phép giá trị trùng lặp bằng cách thiết lập thuộc tính cho cột IDENTITY.
Nếu gặp lỗi khi chèn: -2723: Chỉ khi chỉ định danh sách cột và SET IDENTITY_INSERT là ON, mới có thể gán giá trị cho cột tự động tăng
Bật/Tắt chèn vào cột tự động tăng hiện tại: SET IDENTITY_INSERT <tên_bảng> ON (Bật) / OFF (Tắt)
Chỉ định tên cơ sở dữ liệu (schema) trong URL JDBC
Thuộc tính URL JDBC là schema, chỉ định lược đồ hiện tại sau khi người dùng đăng nhập, mặc định là lược đồ mặc định của người dùng.
URL JDBC: jdbc:dm://ip:port?schema=tên_schema
Không hỗ trợ hàm str_to_date và date_format
Dameng không hỗ trợ các hàm str_to_date và date_format của MySQL (chuyển đổi chuỗi thành thời gian và thời gian thành chuỗi). Trong DM, bạn có thể sử dụng to_char và to_date để thay thế.
date_format(date,'%Y-%m-%d') ————–> to_char();
str_to_date(date,'%Y-%m-%d') ————–> to_date()
Hàm
to_charcó thể định dạng văn bản thời gian và định dạng số.T trong truy vấn SQL rất hữu ích để định dạng ngày và số, bạn có thể định nghĩa linh hoạt định dạng đầu ra theo nhu cầu.
-- Ví dụ với to_char (định dạng thời gian)
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD') FROM dual;
-- Ví dụ với to_char (định dạng số)
SELECT TO_CHAR(12345.67, '9,999.99') FROM dual;
Các ký tự đại diện cho định dạng ngày tháng đã thay đổi
Thông thường, chúng ta sử dụng yyyy, MM, mm, dd để biểu thị.
Trong Dameng, mi là phút, mm là tháng.
Đối với giờ, hh có thể theo sau là 12 hoặc 24 để chỉ định chế độ 12 giờ hoặc 24 giờ: hh12, hh24.
Thiết lập genKeyNameCase trong kết nối JDBC để quy định chữ hoa/thường của tên cột (Lưu ý)
Khi gọi preparedStatement(String sql, String[] columnName), bạn có thể chỉ định tên cột. Tham số này quy định chữ hoa/thường của tên cột. Giá trị có thể là 0/1/2 hoặc none/upper/lower; mặc định là upper.
0 hoặc none: Giữ nguyên; 1 hoặc upper: Chuyển thành chữ hoa; 2 hoặc lower: Chuyển thành chữ thường.
Vấn đề thoát ký tự trong dấu nháy đơn ('') giữa MySQL và Dameng
Dameng không hỗ trợ cú pháp 'chuỗi' với ký tự nháy đơn bên trong. Cần thay đổi thành: 'chuỗi''ký_tự_nháy_đơn'
Sự khác biệt về kích thước lưu trữ ký tự giữa MySQL và Dameng
Sau khi kiểm tra, trường NAMES chứa tiếng Trung. MySQL sử dụng mã hóa UTF8, varchar(1) có thể lưu một ký tự Trung Quốc. Dameng lưu trữ theo đơn vị byte. Với bộ ký tự gb18030, varchar(2) mới có thể lưu một ký tự Trung Quốc; với UTF-8, varchar(3) mới có thể lưu một ký tự. Nếu độ dài của trường names trong MySQL là 10, khi di chuyển, nếu trường names trong Dameng cũng được thiết lập độ dài là 10, sẽ dẫn đến việc không thể lưu được khi có quá 3 ký tự Trung Quốc.
Lưu ý khi sửa đổi cột tự động tăng trong Dameng
Nếu cột bạn sửa đổi là cột tự động tăng, bạn cần xóa thuộc tính tự động tăng của cột đó trước:
Thực thi: ALTER TABLE <tên_bảng> DROP IDENTITY