最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL 時間類型datetime 與 timestamp核心差異深度剖析

 更新時間:2025年09月11日 10:01:01   作者:一葉飄零_sweeeet  
本文將從存儲原理、功能特性、性能表現(xiàn)到實戰(zhàn)場景,全方位拆解這兩種時間類型的差異,結合Java開發(fā)中的典型案例,告訴你在不同業(yè)務場景下如何做出最優(yōu)選擇,感興趣的朋友跟隨小編一起看看吧

在 MySQL 數(shù)據(jù)庫開發(fā)中,時間類型的選擇看似是個小問題,卻可能埋下性能隱患、數(shù)據(jù)一致性問題甚至業(yè)務邏輯漏洞。作為 Java 開發(fā)者,你是否曾在設計表結構時糾結:datetimetimestamp到底該用哪個?為什么同樣存儲 "2024-07-01 12:00:00",兩者會有不同的表現(xiàn)?當系統(tǒng)涉及多時區(qū)部署時,哪個類型能幫你避免 "時差陷阱"?

本文將從存儲原理、功能特性、性能表現(xiàn)到實戰(zhàn)場景,全方位拆解這兩種時間類型的差異,結合 Java 開發(fā)中的典型案例,告訴你在不同業(yè)務場景下如何做出最優(yōu)選擇。

一、初識 datetime 與 timestamp:表面相似,內里不同

1.1 基本定義與存儲格式

datetimetimestamp是 MySQL 中最常用的兩種日期時間類型,都能存儲 "年月日時分秒" 信息,但底層實現(xiàn)卻大相徑庭。

  • datetime:字面意思是 "日期時間",存儲格式為YYYY-MM-DD HH:MM:SS(字符串形式),不依賴時區(qū),存儲的是 "絕對時間"。比如你插入'2024-07-01 12:00:00',它就會原樣存儲這個字符串對應的時間值,不會因數(shù)據(jù)庫時區(qū)變化而改變。
  • timestamp:字面意思是 "時間戳",存儲的是從 1970-01-01 00:00:00 UTC(格林威治標準時間)開始的秒數(shù)(整數(shù)形式),依賴時區(qū)。當你插入一個時間時,MySQL 會先將其轉換為 UTC 時間戳存儲;查詢時,再根據(jù)當前會話的時區(qū)轉換為可讀時間。

1.2 直觀對比:一個簡單的實驗

我們通過實際操作感受兩者的差異。先創(chuàng)建一張包含兩種類型的表:

CREATE TABLE time_demo (
  id INT PRIMARY KEY AUTO_INCREMENT,
  dt datetime,
  ts timestamp
);

插入一條相同的時間記錄(假設當前數(shù)據(jù)庫會話時區(qū)為+08:00,即北京時間):

-- 設置會話時區(qū)為北京時間(東八區(qū))
SET time_zone = '+08:00';
INSERT INTO time_demo (dt, ts) VALUES ('2024-07-01 12:00:00', '2024-07-01 12:00:00');

此時查詢結果看似一致:

SELECT dt, ts FROM time_demo;
-- 結果:
-- dt: 2024-07-01 12:00:00
-- ts: 2024-07-01 12:00:00

但當我們修改會話時區(qū)為 UTC(零時區(qū)),再查詢:

SET time_zone = '+00:00';
SELECT dt, ts FROM time_demo;
-- 結果:
-- dt: 2024-07-01 12:00:00 (不變)
-- ts: 2024-07-01 04:00:00 (自動轉換為UTC時間)

關鍵差異datetime存儲的是 "字符串形式的時間",無論時區(qū)如何變化,查詢結果始終不變;timestamp存儲的是 "UTC 時間戳",查詢時會根據(jù)當前會話時區(qū)轉換為對應時間,本質是 "相對時間"。

1.3 存儲范圍與精度

兩者的存儲范圍和精度差異直接影響適用場景:

特性datetimetimestamp
時間范圍1000-01-01 00:00:00 ~ 9999-12-31 23:59:591970-01-01 00:00:01 UTC ~ 2038-01-19 03:14:07 UTC
存儲大小8 字節(jié)4 字節(jié)(MySQL 5.6.4 前);4 字節(jié) + 小數(shù)秒額外存儲(5.6.4 后)
小數(shù)秒支持支持(最多 6 位,如datetime(3)表示毫秒級)支持(最多 6 位,如timestamp(6)表示微秒級)
默認值無默認值(需顯式插入)可自動初始化(如DEFAULT CURRENT_TIMESTAMP

關于 "2038 問題"

timestamp的時間范圍受限于 4 字節(jié)存儲的最大值(2^31-1 秒),即 2038 年 1 月 19 日 03:14:07 UTC,這就是著名的 "2038 問題"。如果你的系統(tǒng)需要存儲 2038 年之后的時間(比如長期合同到期日、設備報廢時間),timestamp會直接報錯:

-- 插入超過2038年的時間,timestamp會報錯
INSERT INTO time_demo (ts) VALUES ('2039-01-01 00:00:00');
-- 錯誤:Out of range value for column 'ts' at row 1

datetime則能輕松應對:

INSERT INTO time_demo (dt) VALUES ('2039-01-01 00:00:00'); -- 成功

二、核心差異深度剖析:從存儲原理到功能特性

2.1 時區(qū)敏感性:最容易踩坑的差異

時區(qū)處理是datetimetimestamp最核心的區(qū)別,也是 Java 開發(fā)中最容易出問題的地方。我們結合 Java 程序交互場景深入分析:

場景還原:分布式系統(tǒng)中的時區(qū)混亂

假設你有一個部署在上海(東八區(qū))的 Java 后端服務,數(shù)據(jù)庫服務器時區(qū)為 UTC,某張表中同時存在create_time(datetime)和update_time(timestamp)兩個字段。

當 Java 程序執(zhí)行以下代碼插入數(shù)據(jù):

// Java代碼(JVM時區(qū)為Asia/Shanghai,即+08:00)
LocalDateTime now = LocalDateTime.of(2024, 7, 1, 12, 0, 0);
String sql = "INSERT INTO demo (create_time, update_time) VALUES (?, ?)";
preparedStatement.setObject(1, now); // 插入datetime字段
preparedStatement.setObject(2, now); // 插入timestamp字段
preparedStatement.executeUpdate();

此時發(fā)生了什么?

  1. create_time(datetime):Java 將2024-07-01T12:00:00(上海時間)直接轉換為字符串'2024-07-01 12:00:00'存入數(shù)據(jù)庫,數(shù)據(jù)庫(UTC 時區(qū))收到后原樣存儲。
  2. update_time(timestamp):Java 傳遞的上海時間會先被轉換為 UTC 時間(2024-07-01T04:00:00),再轉換為時間戳(1720003200 秒)存入數(shù)據(jù)庫。

當另一個部署在紐約(西五區(qū))的 Java 服務查詢該數(shù)據(jù)時:

  • 查詢create_time:數(shù)據(jù)庫返回'2024-07-01 12:00:00',紐約服務(JVM 時區(qū)為 America/New_York)會將其解析為當?shù)貢r間2024-07-01 00:00:00(12-12=0),導致時間顯示錯誤。
  • 查詢update_time:數(shù)據(jù)庫返回的時間戳(1720003200)會被紐約服務轉換為當?shù)貢r間2024-07-01 00:00:00(UTC+04:00 - 05:00 = 前一天 23:00?不,正確轉換應為 UTC 時間 04:00 - 5 小時 = 前一天 23:00?這里需要準確計算:UTC 時間 04:00,紐約西五區(qū)是 04-5 = 前一天 23:00),與實際業(yè)務時間一致。

結論timestamp會自動適配時區(qū)轉換,適合全球化、跨時區(qū)的系統(tǒng);datetime需要手動處理時區(qū)轉換,否則易出現(xiàn) "時間錯亂"。

2.2 自動初始化與更新:timestamp 的 "懶人福利"

timestamp支持自動初始化(插入時自動設為當前時間)和自動更新(更新記錄時自動刷新為當前時間),而datetime需要顯式設置,這一特性在審計場景(如記錄創(chuàng)建 / 更新時間)非常實用。

示例:創(chuàng)建帶自動時間的表

CREATE TABLE user_operation (
  id INT PRIMARY KEY AUTO_INCREMENT,
  username VARCHAR(50),
  create_time datetime DEFAULT CURRENT_TIMESTAMP, -- 需要顯式指定默認值
  update_time timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP -- 自動初始化+更新
);

測試插入和更新:

-- 插入時不指定時間字段
INSERT INTO user_operation (username) VALUES ('zhangsan');
-- 查詢結果:
-- create_time: 2024-07-01 15:30:00(插入時的當前時間)
-- update_time: 2024-07-01 15:30:00(自動初始化)
-- 10分鐘后更新記錄
UPDATE user_operation SET username = 'zhangshan2' WHERE id = 1;
-- 再次查詢:
-- create_time: 2024-07-01 15:30:00(不變)
-- update_time: 2024-07-01 15:40:00(自動更新)

datetime要實現(xiàn)類似功能,需在 SQL 中顯式處理:

-- 插入時手動設置當前時間
INSERT INTO user_operation (username, create_time, update_time) 
VALUES ('lisi', NOW(), NOW());
-- 更新時手動刷新update_time
UPDATE user_operation 
SET username = 'lisi2', update_time = NOW() 
WHERE id = 2;

在 Java 開發(fā)中,使用 MyBatis 時timestamp的自動更新特性可減少代碼量:

<!-- timestamp字段無需在insert/update中顯式設置 -->
<insert id="addUser">
  INSERT INTO user_operation (username) VALUES (#{username})
</insert>
<!-- datetime需要顯式傳入時間 -->
<insert id="addUserWithDatetime">
  INSERT INTO user_operation (username, create_time, update_time) 
  VALUES (#{username}, #{createTime}, #{updateTime})
</insert>

2.3 存儲效率與性能:4 字節(jié) vs8 字節(jié)的差距

timestamp僅需 4 字節(jié)存儲(不含小數(shù)秒),datetime需 8 字節(jié),在大數(shù)據(jù)量場景下,timestamp的存儲優(yōu)勢會體現(xiàn)為:

  1. 磁盤空間節(jié)省:一張 1 億行的表,timestampdatetime節(jié)省 4 億字節(jié)(約 38MB)。
  2. 索引效率更高:索引文件更小,IO 操作更少,查詢速度更快。

我們做一個簡單測試:在兩張結構相同的表(t_datetimet_timestamp)中各插入 100 萬行數(shù)據(jù),其中時間字段分別為datetimetimestamp,然后查詢時間范圍:

-- t_datetime表查詢
SELECT COUNT(*) FROM t_datetime WHERE create_time BETWEEN '2024-01-01' AND '2024-06-30';
-- 執(zhí)行時間:0.87秒
-- t_timestamp表查詢
SELECT COUNT(*) FROM t_timestamp WHERE create_time BETWEEN '2024-01-01' AND '2024-06-30';
-- 執(zhí)行時間:0.62秒

可見timestamp的查詢效率略高,尤其在索引范圍掃描時優(yōu)勢更明顯。

但注意:當timestamp使用小數(shù)秒(如timestamp(6))時,存儲字節(jié)會增加(每 2 位小數(shù)秒額外占 1 字節(jié)),此時可能與datetime(6)(8 字節(jié))差距縮小。

2.4 與 Java 類型的映射:避免 "類型不匹配"

在 Java 開發(fā)中,datetimetimestamp與 Java 時間類型的映射需特別注意,否則易出現(xiàn)轉換錯誤。

MyBatis 映射示例

MySQL 類型Java 類型推薦映射配置示例
datetimeLocalDateTimejdbcType=TIMESTAMP(注意:MyBatis 中 datetime 需用 TIMESTAMP 類型處理)
timestampLocalDateTimejdbcType=TIMESTAMP

錯誤案例:將datetime映射為String類型,會導致時間比較、排序功能異常:

// 錯誤:用String接收時間,無法直接比較
String createTime = resultMap.get("createTime"); // "2024-07-01 12:00:00"
if (createTime.compareTo("2024-06-01 00:00:00") > 0) { ... } // 字符串比較可能出錯(如月份"07" vs "6")

正確做法:用LocalDateTime接收,通過時間 API 處理:

LocalDateTime createTime = resultMap.get("createTime");
if (createTime.isAfter(LocalDateTime.of(2024, 6, 1, 0, 0, 0))) { ... } // 安全可靠

JPA/Hibernate 映射

JPA 中需通過@Column指定columnDefinition,避免類型自動轉換錯誤:

@Entity
@Table(name = "user_log")
public class UserLog {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    // datetime類型映射
    @Column(name = "login_time", columnDefinition = "datetime")
    private LocalDateTime loginTime;
    // timestamp類型映射
    @Column(name = "update_time", columnDefinition = "timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP")
    private LocalDateTime updateTime;
}

三、實戰(zhàn)場景:該選 datetime 還是 timestamp?

沒有絕對的 "最好",只有 "最合適"。根據(jù)業(yè)務場景選擇時間類型,才能避免后期維護隱患。

3.1 場景 1:全球化跨時區(qū)系統(tǒng)(如電商平臺、社交 APP)

推薦:timestamp

理由:

  • 自動處理時區(qū)轉換,用戶在不同地區(qū)看到的時間與當?shù)貢r區(qū)一致。
  • 舉例:用戶在紐約下單(當?shù)貢r間 2024-07-01 00:00),數(shù)據(jù)庫存儲的 timestamp 是 UTC 時間 2024-07-01 04:00,上海客服查看時自動轉換為 12:00,符合業(yè)務直覺。

實現(xiàn)建議

  • 數(shù)據(jù)庫服務器時區(qū)設為 UTC,避免時區(qū)疊加轉換。
  • Java 程序中統(tǒng)一用LocalDateTime處理,MyBatis 映射時指定jdbcType=TIMESTAMP。

3.2 場景 2:本地系統(tǒng)(如企業(yè)內部 OA、財務系統(tǒng))

推薦:datetime

理由:

  • 系統(tǒng)僅在單一時區(qū)使用,無需復雜的時區(qū)轉換。
  • 可存儲超過 2038 年的時間(如財務報表的預算周期到 2050 年)。

實現(xiàn)建議

  • 數(shù)據(jù)庫和應用服務器統(tǒng)一時區(qū)(如 Asia/Shanghai)。
  • 插入時間時顯式使用NOW()或 Java 的LocalDateTime.now(),避免依賴默認值。

3.3 場景 3:審計日志與數(shù)據(jù)追蹤(如操作日志、登錄記錄)

推薦:timestamp

理由:

  • 支持DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,自動記錄創(chuàng)建和更新時間,減少代碼冗余。
  • 時間戳存儲更節(jié)省空間,適合日志表(通常數(shù)據(jù)量大)。

示例表設計

CREATE TABLE operation_log (
  id BIGINT PRIMARY KEY AUTO_INCREMENT,
  user_id BIGINT NOT NULL,
  operation VARCHAR(100) NOT NULL,
  create_time timestamp DEFAULT CURRENT_TIMESTAMP, -- 自動記錄創(chuàng)建時間
  update_time timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP -- 自動更新
);

3.4 場景 4:需要高精度時間(如毫秒級日志、高頻交易)

推薦:datetime (3) 或 timestamp (3),根據(jù)時區(qū)需求選擇

兩者都支持小數(shù)秒,語法為datetime(3)(毫秒)、timestamp(6)(微秒):

CREATE TABLE high_freq_trade (
  id BIGINT PRIMARY KEY AUTO_INCREMENT,
  trade_no VARCHAR(50) NOT NULL,
  trade_time datetime(3) NOT NULL, -- 毫秒級時間
  amount DECIMAL(10,2) NOT NULL
);
-- 插入帶毫秒的時間
INSERT INTO high_freq_trade (trade_no, trade_time, amount)
VALUES ('T20240701120000123', '2024-07-01 12:00:00.123', 100.00);

選擇依據(jù)

  • 若需跨時區(qū):timestamp(3)
  • 若僅本地且時間范圍超 2038 年:datetime(3)

3.5 場景 5:歷史數(shù)據(jù)歸檔(如 1000 年的文物記錄、地質年代數(shù)據(jù))

強制選擇:datetime

理由:timestamp的最小值是 1970 年,無法存儲更早的時間:

-- 正確:用datetime存儲古代時間
CREATE TABLE ancient_artifact (
  id INT PRIMARY KEY,
  name VARCHAR(100) NOT NULL,
  origin_time datetime NOT NULL -- 可存儲'1000-01-01 00:00:00'
);

四、避坑指南:這些錯誤你可能也犯過

4.1 誤區(qū) 1:"timestamp 比 datetime 更精確"

真相:兩者精度相同,都支持 0-6 位小數(shù)秒(毫秒到微秒)。精度差異僅取決于定義方式:

-- 兩者精度相同
CREATE TABLE time_precision_demo (
  dt datetime(6), -- 微秒級
  ts timestamp(6) -- 微秒級
);

4.2 誤區(qū) 2:"用 datetime 存儲 UTC 時間就能替代 timestamp"

真相:手動存儲 UTC 時間的datetime需要全程手動轉換,易出錯:

// 錯誤示例:手動轉換UTC時間存入datetime
LocalDateTime utcTime = LocalDateTime.now(ZoneOffset.UTC);
// 存入數(shù)據(jù)庫后,查詢時需手動轉換為本地時間,若遺漏則顯示UTC時間,導致用戶看到"時差"

timestamp自動完成轉換,更可靠。

4.3 誤區(qū) 3:"2038 問題離我們還遠,不用在意"

真相:2038 年距今僅 14 年,若系統(tǒng)生命周期超過 10 年(如銀行核心系統(tǒng)、基礎設施軟件),必須避免使用timestamp

-- 保險系統(tǒng)的保單到期日可能到2060年,必須用datetime
CREATE TABLE insurance_policy (
  policy_no VARCHAR(20) PRIMARY KEY,
  expire_time datetime NOT NULL -- 正確選擇
);

4.4 實戰(zhàn)踩坑:MySQL 時區(qū)配置不當導致的問題

現(xiàn)象:Java 程序插入的時間與數(shù)據(jù)庫查詢結果差 8 小時。

原因:

  • 數(shù)據(jù)庫時區(qū)為 UTC,Java 程序時區(qū)為 Asia/Shanghai(+8)。
  • 插入datetime時,Java 傳遞的是上海時間(如 12:00),數(shù)據(jù)庫原樣存儲,查詢時 Java 將其視為 UTC 時間(12:00),轉換為上海時間就是 20:00(12+8),導致差 8 小時。

解決:

  • 統(tǒng)一數(shù)據(jù)庫和 Java 時區(qū):SET GLOBAL time_zone = '+8:00';(數(shù)據(jù)庫),JVM 參數(shù)-Duser.timezone=Asia/Shanghai。
  • 若用timestamp,無需手動調整,數(shù)據(jù)庫會自動轉換。

五、總結:一張表搞定時間類型選擇

決策因素選 datetime 的情況選 timestamp 的情況
時區(qū)需求單一時區(qū),無需轉換跨時區(qū)、全球化系統(tǒng)
時間范圍需要存儲 1000-01-01 ~ 1000-01-01 或 2038 年后僅需存儲 1970-2038 年之間的時間
自動更新需求不需要,顯式控制時間需要自動記錄創(chuàng)建 / 更新時間(如審計日志)
數(shù)據(jù)量數(shù)據(jù)量小,8 字節(jié)影響可忽略數(shù)據(jù)量大(如日志表),需節(jié)省存儲空間
系統(tǒng)生命周期超過 10 年(可能跨越 2038 年)短期系統(tǒng)(10 年內退役)

終極建議

  • 新系統(tǒng)優(yōu)先考慮timestamp,除非明確需要存儲超 2038 年的時間或僅用于單一時區(qū)。
  • 混用兩種類型時,用字段名區(qū)分(如create_timestamp、expire_datetime),避免混淆。
  • 無論選擇哪種類型,務必在數(shù)據(jù)庫設計文檔中注明時區(qū)處理策略,方便后續(xù)維護。

時間類型的選擇,本質是對業(yè)務場景的理解和對系統(tǒng)生命周期的預判。希望本文能幫你在 datetime 和 timestamp 之間做出最適合的選擇,讓你的系統(tǒng)在時間的長河中始終 "準確無誤"。

到此這篇關于MySQL 時間類型datetime 與 timestamp 誰是你的最佳拍檔的文章就介紹到這了,更多相關mysql 時間類型datetime 與 timestamp內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • MySQL數(shù)據(jù)庫查詢之多表查詢總結

    MySQL數(shù)據(jù)庫查詢之多表查詢總結

    最近遇到了多表查詢的需求,也稱為關聯(lián)查詢,指兩個或更多個表一起完成查詢操作,下面這篇文章主要給大家介紹了關于MySQL數(shù)據(jù)庫查詢之多表查詢的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-08-08
  • MySQL深入淺出掌握觸發(fā)器用法

    MySQL深入淺出掌握觸發(fā)器用法

    觸發(fā)器是SQLserver提供給程序員和數(shù)據(jù)分析員來保證數(shù)據(jù)完整性的一種方法,它是與表事件相關的特殊的存儲過程,事件是在 MySQL 5.1后引入的,有點類似操作系統(tǒng)的計劃任務,但是周期性任務是內置在MySQL服務端執(zhí)行的
    2022-05-05
  • Mysql數(shù)據(jù)庫的一些命令

    Mysql數(shù)據(jù)庫的一些命令

    如果你習慣用 windows 的數(shù)據(jù)庫,也就是在 圖形界面上操作數(shù)據(jù)庫的話,那么當你在命令上 操作 mysql 將會感到陌生,其實只要你掌握了一些基本命令,還有經(jīng)常使用,熟練起來了, 將會相當方便,而且很快速
    2013-11-11
  • MSSQL output使用

    MSSQL output使用

    存儲過程 output 輸出參數(shù) 可以是一個字符串
    2009-05-05
  • MySQL回表的性能傷害程度有多大

    MySQL回表的性能傷害程度有多大

    這篇文章主要介紹了MySQL回表的性能傷害程度有多大?下面我們就帶著疑問進入下面文章了解詳細內容,需要的小伙伴可以參考一下,希望對你的學習有所幫助
    2022-02-02
  • mysql 批量查詢取每一組最新一條數(shù)據(jù)

    mysql 批量查詢取每一組最新一條數(shù)據(jù)

    根據(jù)車牌號查詢最新的一條交車記錄的‘合同號’ ,這里只需要查詢‘合同號’這個字段,這篇文章主要介紹了mysql 批量查詢取每一組最新一條數(shù)據(jù),需要的朋友可以參考下
    2024-02-02
  • MySQL從庫過濾所有DELETE操作的幾種方案

    MySQL從庫過濾所有DELETE操作的幾種方案

    在 MySQL 從庫 上,有沒有一種 全局配置方式,可以直接禁止或過濾所有 DELETE(乃至 UPDATE)操作?本文我會詳細說明 生產(chǎn)可用的幾種方法(推薦從強到弱排列),需要的朋友可以參考下
    2025-10-10
  • 從零開始搭建MySQL MMM架構

    從零開始搭建MySQL MMM架構

    這篇文章主要介紹了從零開始搭建MySQL MMM架構,本文講解了配置MySQL Relication、新建同步數(shù)據(jù)庫需要的用戶、同步主從數(shù)據(jù)庫、安裝MMM、配置MMM、啟動MMM等問題,需要的朋友可以參考下
    2015-04-04
  • sql語句 update字段null不能用is null問題

    sql語句 update字段null不能用is null問題

    這篇文章主要介紹了sql語句 update字段null不能用is null問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • mysql5.7安裝及配置教程

    mysql5.7安裝及配置教程

    這篇文章主要為大家詳細介紹了mysql5.7安裝及配置教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11

最新評論

蚌埠市| 哈巴河县| 清涧县| 莎车县| 应用必备| 江达县| 呼伦贝尔市| 榆林市| 安吉县| 安吉县| 称多县| 富民县| 鱼台县| 丰都县| 康乐县| 巩义市| 苏尼特左旗| 苏州市| 西青区| 宣汉县| 沂南县| 晋中市| 藁城市| 宁蒗| 乡城县| 会同县| 大化| 壤塘县| 华宁县| 元谋县| 承德市| 昭苏县| 鄂温| 东阳市| 吐鲁番市| 手机| 哈密市| 临泽县| 讷河市| 兴业县| 西安市|