Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Spring Boot với Hibernate:Lược đồ cơ sở dữ liệu tự động tạo với các cột có thể chứa vài phần giây

MySql57Dialect (và / hoặc MySql57InnoDbDialect , tùy thuộc vào phiên bản Hibernate), TIMESTAMP Kiểu SQL đã được ánh xạ tới TIMESTAMP(6) loại cột cơ sở dữ liệu:

registerColumnType( Types.TIMESTAMP, "datetime(6)" );

Điều này có nghĩa là định nghĩa cột mặc định phải hỗ trợ độ chính xác micro giây. Cách tốt nhất của hành động là cho phép Hibernate tạo lược đồ mà không ghi đè định nghĩa cột. Đối với hầu hết các cơ sở dữ liệu khác, nó sẽ giảm chất lượng thành một TIMESTAMP đơn giản .

Nếu bạn muốn chuyển sang một cơ sở dữ liệu khác trong tương lai cũng hỗ trợ độ chính xác micro giây, hãy tra cứu Dialect có liên quan; nó có thể sẽ bao gồm hỗ trợ cho tính năng và nếu không, bạn luôn có thể tùy chỉnh nó.

Điều này là do trong registerColumnType gọi ở trên, độ chính xác của TIMESTAMP được cố định ở mức 6. Nếu bạn muốn có thể tùy chỉnh nó, hãy triển khai phương ngữ tùy chỉnh của riêng bạn (mở rộng từ MySql57Dialect ) và ghi đè định nghĩa bằng:

registerColumnType(Types.TIMESTAMP, 6, "timestamp($l)"); //l for length, p for precicion, s for scale

Sau đó, bạn sẽ có thể ghi đè độ dài cột bằng cách sử dụng length , precision hoặc scale (tùy thuộc vào những gì bạn đặt bên trong dấu ngoặc). Lưu ý rằng đối số thứ hai của phương thức xác định độ dài cột tối đa có thể có cho kiểu dữ liệu cụ thể này, vì vậy nếu bạn muốn, ví dụ:độ chính xác nano giây, bạn nên thay đổi nó thành 9.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. làm thế nào để có được các hàng riêng biệt với giá trị tối đa

  2. Truy vấn cho bài đăng và thẻ trong cùng một truy vấn

  3. MySQL, Lỗi 126:Tệp khóa không chính xác cho bảng

  4. Giao điểm phạm vi ngày trong SQL

  5. Chuyển đổi chuỗi thời gian sang giờ thập phân PHP